Java Persistence API (JPA) হলো Java EE এবং Java SE পরিবেশে ডেটা ধরে রাখার একটি স্ট্যান্ডার্ড API, যা অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) সরবরাহ করে। JPA ব্যবহার করে ডেভেলপাররা সহজেই Java অবজেক্টকে ডেটাবেস টেবিলের সাথে ম্যাপ করতে পারে এবং CRUD অপারেশন (Create, Read, Update, Delete) সহ বিভিন্ন ডেটা ম্যানিপুলেশন টাস্ক সম্পাদন করতে পারে। JPA মূলত Hibernate, EclipseLink, এবং OpenJPA-এর মত টুলের মাধ্যমে ব্যবহৃত হয়।
JPA প্রজেক্টে persistence.xml ফাইল প্রয়োজন, যা ডেটাবেস এবং JPA প্রোভাইডারের কনফিগারেশন সংরক্ষণ করে।
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="my-persistence-unit">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.example.model.Student</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mydatabase"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="password"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
বিবরণ:
নিচের উদাহরণে একটি Student
ক্লাসকে ডেটাবেস টেবিলের সাথে ম্যাপ করা হয়েছে এবং CRUD অপারেশন করা হয়েছে।
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private int age;
// গেটার এবং সেটার মেথড
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
বিবরণ:
Student
ক্লাসটিকে একটি Entity হিসেবে ঘোষণা করা হয়েছে।id
ফিল্ডকে প্রাইমারি কী হিসেবে চিহ্নিত করা হয়েছে।id
ফিল্ডকে অটোমেটিকভাবে জেনারেট করার জন্য GenerationType.IDENTITY
ব্যবহার করা হয়েছে।import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.util.List;
public class StudentService {
private EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
public void createStudent(Student student) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(student); // ডেটাবেসে ডেটা সংরক্ষণ
em.getTransaction().commit();
em.close();
}
public Student findStudent(Long id) {
EntityManager em = emf.createEntityManager();
Student student = em.find(Student.class, id); // ডেটা খোঁজা
em.close();
return student;
}
public List<Student> findAllStudents() {
EntityManager em = emf.createEntityManager();
List<Student> students = em.createQuery("SELECT s FROM Student s", Student.class).getResultList(); // সমস্ত ডেটা খোঁজা
em.close();
return students;
}
public void updateStudent(Student student) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.merge(student); // ডেটা আপডেট
em.getTransaction().commit();
em.close();
}
public void deleteStudent(Long id) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Student student = em.find(Student.class, id);
if (student != null) {
em.remove(student); // ডেটা ডিলিট
}
em.getTransaction().commit();
em.close();
}
}
বিবরণ:
createStudent()
, findStudent()
, findAllStudents()
, updateStudent()
, এবং deleteStudent()
মেথড CRUD অপারেশন সম্পন্ন করে।JPQL একটি JPA নির্ধারিত কোয়েরি ভাষা, যা SQL-এর মত কাজ করে কিন্তু এটি ডাটাবেস টেবিলের পরিবর্তে Entity অবজেক্টের উপর কাজ করে।
List<Student> students = em.createQuery("SELECT s FROM Student s WHERE s.age > 18", Student.class).getResultList();
বিবরণ:
Student
Entity থেকে সেইসব স্টুডেন্ট বের করে যাদের বয়স ১৮ এর চেয়ে বেশি।JPA ব্যবহার করে সহজে ডাটাবেস ইন্টিগ্রেশন এবং ডেটা ম্যানেজমেন্ট করা যায়, যা Java ভিত্তিক এন্টারপ্রাইজ অ্যাপ্লিকেশনে প্রচুর ব্যবহৃত হয়।